package dominio;

import java.io.IOException;
import java.util.Date;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.util.Bytes;

public abstract class Persona {
	String nombre;
	String apellido;
	String mail;
	String legajo;
	Date fechaNacimiento;
	
	public Persona(Date fechaNacimiento) {
		this.fechaNacimiento = fechaNacimiento;
	}
	
	public void save() throws IOException {
		Configuration conf = HBaseConfiguration.create();
        HBaseAdmin admin = new HBaseAdmin(conf);
        
        String tablename = "persona";
        
        this.createTable(admin, tablename);
        
        try {
        	
            HTable table = new HTable(conf, Bytes.toBytes(tablename));
            
            Put p = new Put(Bytes.toBytes("row1"));
            this.loadAttributes(p);
            table.put(p);
            
        } finally {
            admin.close();
        }
	}

	public void loadAttributes(Put p) {
		this.addAttribute(p, "nombre", this.getNombre());
		this.addAttribute(p, "apellido", this.getApellido());
		this.addAttribute(p, "mail", this.getMail());
		this.addAttribute(p, "legajo", this.getLegajo());
		this.addAttribute(p, "fechaNacimiento", this.getFechaNacimiento().toString());
	}

	protected void addAttribute(Put p, String nameAttrib, String value) {
		p.add(Bytes.toBytes("cf"), Bytes.toBytes(nameAttrib), Bytes.toBytes(value));
	}
	
	private void createTable(HBaseAdmin admin, String table) throws IOException {
		if (! admin.tableExists(table)) {
			HTableDescriptor desc = new HTableDescriptor(table);
			desc.addFamily(new HColumnDescriptor("cf"));
			admin.createTable(desc);
		}
    }

	public Date getFechaNacimiento() {
		return this.fechaNacimiento;
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getApellido() {
		return apellido;
	}

	public void setApellido(String apellido) {
		this.apellido = apellido;
	}

	public String getMail() {
		return mail;
	}

	public void setMail(String mail) {
		this.mail = mail;
	}

	public String getLegajo() {
		return legajo;
	}

	public void setLegajo(String legajo) {
		this.legajo = legajo;
	}

	public void setFechaNacimiento(Date fechaNacimiento) {
		this.fechaNacimiento = fechaNacimiento;
	}
}
